linux系统syslog/rsyslog/sysng 您所在的位置:网站首页 centos syslog外发 linux系统syslog/rsyslog/sysng

linux系统syslog/rsyslog/sysng

#linux系统syslog/rsyslog/sysng| 来源: 网络整理| 查看: 265

一台服务器的日志对系统工程师来说是至关重要,一旦服务器出现故障或被入侵,需要查看日志来定位问题。

一、syslog详解

1、syslog简介

syslog 系统日志,记录linux系统启动及运行的过程中产生的信息,rhel5.x系统上默认自带了syslog 其配置文件是/etc/syslog.conf。

syslog 默认有两个守护进程:klogd,syslogd。klogd 进程是记录系统运行的过程中内核生成的日志,而在系统启动的过程中内核初始化过程中 生成的信息记录到控制台(/dev/console),当系统启动完成之后会把此信息存放到/var/log/dmesg文件中,可以通过cat /var/log/dmesg查看这个文件,也可以通过dmesg命令来查看。

syslogd 进程是记录非内核的信息。

而为什么需要两个守护进程呢?是因为内核跟其他信息需要记录的详细程度及格式的不同。而这两个守护进程是共用一个配置文件/etc/syslog.conf。

2、syslog配置文件详解

配置文件定义格式为 facility.priority action

facility

facility可以理解为日志的来源或设备,目前常用的facility有以下几种:

1)auth # 认证相关的

2)authpriv # 权限,授权相关的

3)cron # 任务计划相关的

4)daemon # 守护进程相关的

5)kern # 内核相关的

6)lpr # 打印相关的

7)mail # 邮件相关的

8)mark # 标记相关的

9)news # 新闻相关的

10)security # 安全相关的,与auth 类似

11)syslog # syslog自己的

12)user # 用户相关的

13)uucp # unix to unix cp 相关的

14)local0 到 local7 # 用户自定义使用

15)* # *表示所有的facility除了 mark

除mark 用于生成时间戳为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。

priority

priority(log level)日志的级别,一般有以下几种级别(从低到高)

debug # 程序或系统的调试信息

info # 一般信息

notice # 不影响正常功能,需要注意的消息

warning/warn # 可能影响系统功能,需要提醒用户的重要事件

err/error # 错误信息

crit # 比较严重的

alert # 必须马上处理的

emerg/oanic # 会导致系统不可用的

* # 表示所有的日志级别

none # 跟* 相反,表示啥也没有

panic、error、warn均为旧的标识符,不再建议使用。

action

(tab隔开) action(动作)为日志记录的位置

系统上的绝对路径# 普通文件 如:/var/log/xxx

| # 管道 通过管道送给其他的命令处理

终端 # 终端 如:/dev/console

@HOST # 远程主机 如: @10.0.0.1

用户 # 系统用户 如: root

* # 登录到系统上的所有用户

selector选择条件

通过小数点符号“.”把facility和priority(level)连接在一起则成为selector(选择条件/选择器)。

可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:

* 所有日志信息= 等于,即仅包含本优先级的日志信息! 不等于,本优先级日志信息除外

日志定义实例

http://mail.info /var/log/mail.log # 表示将mail相关的,级别为info及 info以上级别的信息记录到/var/log/mail.log文件中

auth.=info @10.0.0.1 # 表示将auth相关的,级别为info的信息记录到10.0.0.1主机上,前提是10.0.0.1要能接收其他主机发来的日志信息

user.!=error # 表示记录user相关的,不包括error级别的信息

user.!error # 与user.error相反

*.info # 表示记录所有的日志信息的info级别

mail.* # 表示记录mail相关的所有级别的信息

*.* # 都应该懂的.

cron.info;http://mail.info # 多个日志来源用";" 隔开

cron,mail.info#等价cron.info;http://mail.info

mail.*;mail.!=info # 记录mail相关的所有级别的信息,但不包括info级别

一般默认配置

# 表示将所有facility的info级别,但不包括mail,authpriv,cron相关的信息,记录到 /var/log/messages文件

*.info;mail.none;authpriv.none;cron.none /var/log/messages

# 表示将权限,授权相关的所有基本的信息,记录到/var/log/secure文件中.这个文件的权限是600

authpriv.* /var/log/secure

# 表示将mail相关的所有基本的信息记录到/var/log/maillog文件中,可以看到路径前面有一个"-"

# "-" 表示异步写入磁盘,

mail.* -/var/log/maillog

# 表示将任务计划相关的所有级别的信息记录到/var/log/cron文件中

cron.* /var/log/cron

# 表示将所有facility的emerg级别的信息,发送给登录到系统上的所有用户

*.emerg *

# 表示将uucp及news的crit级别的信息记录到/var/log/spooler文件中

uucp,news.crit /var/log/spooler

# 表示将local7的所有级别的信息记录到/var/log/boot.log文件中, local0 到local7这8个是用户自定义使用的,这里的local7记录的是系统启动相关的信息

local7.* /var/log/boot.log

# 紧急消息(emerg级别)将使用wall显示给当前所有登录的用户

*.=emerg *

# 该规则将所有alert以及更高级别的消息定向到操作员的终端,即登录的用户“root”和“joey”的终端。

*.alert root,joey

# 如果是日志服务器格式是:

*.* @192.168.100.1 (使用UDP协议发送)

*.* @@192.168.100.1 (使用TCP协议发送)

syslog默认记录的日志格式有四个字段:时间标签 主机 子系统名称 消息

可以使用tail /var/log/messages 查看

二、rsyslog详解

1、rsyslog介绍

rsyslog是linux系统中用来实现日志功能的服务。默认已经安装,并且自动启用。Rsyslog 是一个 syslogd 的多线程增强版,依然基于Syslog协议(linux6之前默认使用syslog程序,centos6用rsyslog所取代)完成系统日志的处理转发,官方形容它是一个极速(如火箭般快速)的日志处理系统。它提供高性能、极好的安全功能和模块化设计。虽然它基于常规的 syslogd

作用:主要用来采集日志,不生产日志

其特性包括:

支持输出日志到各种数据库,如 MySQL,PostgreSQL,MongoDB ElasticSearch,等等;

通过 RELP + TCP 实现数据的可靠传输(基于此结合丰富的过滤条件可以建立一种 可靠的数据传输通道供其他应用来使用);

精细的输出格式控制以及对消息的强大 过滤能力;

高精度时间戳;队列操作(内存,磁盘以及混合模式等); 支持数据的加密和压缩传输等。

2、rsyslog概念

facility

设施,用来定义日志消息的来源,方便对日志进行分类

日志类型 日志内容

kern 内核信息

user 用户程序产生的相关信息

mail 邮件系统信息

daemon 守护进程产生的信息

auth pam认证系统信息

syslog 日志系统自身信息

authpriv ssh、ftp等登录信息

cron 系统执行定时任务产生的信息

lpr 打印相关信息

mark 服务内部的信息,时间标识

uucp Unix-to-Unix Copy 两个unix之间的相关通信

local0-local7 保留,本地使用

priority

日志级别,定义不同消息的级别

日志等级 说明(级别从低到高,记录信息越来越少)

0 debug 包含详细的开发情报的信息,通常只在调试一个程序时使用。

1 info 通用性信息,一般用来提供有用信息,

2 notice 正常信息,但是较为重要,可能需要处理

3 warning 警告信息

4 error/err 错误信息,某个功能或者模块不能正常工作的信息

5 crit 严重级别,系统或整个软件不能正常工作的信息,例如硬盘错误

6 alert 需要立刻修改的信息,如系统数据库被破坏,ISP连接丢失。

7 emerg 紧急情况,内核奔溃等重要信息

8 none 什么也不记录

日志设施的配置

符号 说明

. 比后面还要高的信息等级都会记录下来

.= 只有后面这个消息等级会被记录下来

.! 除了后面的消息等级,其他的都会被记录下来(注意前面需要先有其他过滤规则,否则什么不记录)

rsyslog.conf组成

modules,模块,配置加载的模块,如:ModLoad imudp.so配置加载UDP传输模块

global directives,全局配置,配置ryslog守护进程的全局属性,比如主信息队列大小(MainMessageQueueSize)

rules,规则(选择器+动作),每个规则行由两部分组成,selector部分和action部分,这两部分由一个或多个空格或tab分隔,selector部分指定源和日志等级,action部分指定对应的操作

模板(templates)

输出(outputs)

常用modules

imudp,传统方式的UDP传输,有损耗

imtcp,基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用

imrelp,RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用

规则(rules)

规则选择器(selectors)

selector也由两部分组成,设施和优先级,由点号.分隔。

第一部分为消息源或称为日志设施,第二部分为日志级别。

多个选择器用;分隔,如:*.info;mail.none。

动作(action)

action是规则描述的一部分,位于选择器的后面,规则用于处理消息

消息内容可以被写入到一个日志文件中,也可以写入到数据表表或转发到其他主机, 还可以发送给主机用户 (可以指定用户名,用 * 表示所有)

RULES配置示例

# modules, 要将日志写到mysql中需要加载ommysql模块

$ModLoad ommysql

# rule, send to mysql

#*.* :ommysql:database-server,database-name,database-userid,database-password

*.* :ommysql:127.0.0.1,Syslog,syslogwriter,topsecret

模板(templates)

模板允许你指定日志信息格式

也可用于生成动态文件名,或在规则中使用

**TEMPLATE_NAME:**模板的名字;

PROPERTY:rsyslog本身支持的一些属性参数。

# 使用规则

$template TEMPLATE_NAME,"text %PROPERTY% more text", [OPTION]

## 以时间字符串开头的文件

$template DynamicFile,"/var/log/test_logs/%timegenerated%-test.log"

## 以年月日主机名为目录下的文件

$template DailyPerHostLogs,"/var/log/syslog/%$YEAR%/%$MONTH%/%$DAY%/%HOSTNAME%/messages.log"

## 自定义日志内容格式

$template LOGFMT,"%timegenerated% %FROMHOST-IP% %syslogtag% %msg%\n"

## 引用自定义的 动态文件名 中定义的内容

*.info ?DailyPerHostLogs

*.* ?DynamicFile

*.* /var/log/myinfo.log;LOGFMT

模板元素属性

属性 说明

msg 日志的信息内容,message

hostname 打印该日志的主机名

source hostname属性的别名

fromhost 接收的信息来自哪个节点。这里是dns解析的名字

fromhost-ip 接收的信息来自哪个节点,这里是ip,本地是127.0.0.1

syslogtag 日志记录目标

timegenerated 高精度显示日志时间

timesteamp 同 timegenerated

timereported 日志中的时间戳

syslogseverity 日志严重性等级,数字形式表示

syslogseverity-text 日志严重性等级,文本形式表示

jsonmesg 整个日志对象作为json表示。可能出现数据重复,譬如syslogtag包含着programname,但两者都会分别表示。所以这个属性有一些额外开销,建议只有在实际需要的时候再用。

修改模板日志

vim /etc/rsyslog.conf

# 创建一个名为cky_format的模板,其中 TIMESTAMP:8:15 表示timestamp属性值切片第八位到第十五位。

$template cky_format, "%$NOW% %TIMESTAMP:8:15% %hostname% %syslogseverity-text% %syslogtag% %msg%\n"

$ActionFileDefaultTemplate cky_format

#重启rsyslog

systemctl restart rsyslog

日志格式效果

# NOW | timestamp:8:18| hostname| syslogseverity-text | syslogtag | msg

2023-03-09 09:29:24 mycomputer info systemd: Started System Logging Service.

# 时间戳 | 主机名| 日志等级 | 服务进程 | 日志内容

rsyslog远程传输

1、UDP传输

Server端配置

/etc/rsyslog.conf

# Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

$AllowedSender UDP, 192.168.10.0/24

# This one is the template to generate the log filename dynamically, depending on the client's IP address.

# 根据客户端的IP单独存放主机日志在不同目录,syslog需要手动创建

$template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"

# Log all messages to the dynamically formed file.

:fromhost-ip, !isequal, "127.0.0.1" ?Remote

# 排除本地主机IP日志记录,只记录远程主机日志

# 注意此规则需要在其它规则之前,否则配置没有意义,远程主机的日志也会记录到Server的日志文件中

Client端配置

/etc/rsyslog.conf

*.* @192.168.10.120

配置完成之后/etc/init.d/rsyslog restart

2.TCP传输

Server端配置

# Provides TCP syslog reception

$ModLoad imtcp

$InputTCPServerRun 514

$AllowedSender TCP, 192.168.80.0/24

# This one is the template to generate the log filename dynamically, depending on the client's IP address.

$template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"

# Log all messages to the dynamically formed file.

:fromhost-ip, !isequal, "127.0.0.1" ?Remote

Client端配置

/etc/rsyslog.conf

*.* @@192.168.80.120

三、syslog-ng详解

1.syslog-ng简介

syslog-ng (syslog-Next generation) 是syslog的升级版,syslog-ng有两个版本,一个是收费,一个是开源。 syslog-ng 应用程序是一个灵活、高扩展性的系统日志工具,主要是用于解决集中日志记录的工具。它的主要特点有 :1、可靠的日志传输。syslog-ng 允许你发送日志到远程的日志服务器上。传输过程使用 TCP ,区别于 syslog 的 UDP ,可以确保不会丢失数据2、通过使用 SSL/TLS 来加密日志传输过程。不过这个功能只有在 premium 版本才提供。3、基于磁盘的缓冲。syslog-ng 可以在网络连接失效时先把日志写入硬盘,等网络连接恢复时再传输到日志服务器上,而且确保日志的顺序不会混乱。不过这个功能也是 premium 版本才提供的。4、直接数据库访问。能够把日志直接存入数据库,以便进行搜索及配合日志分析应用程序。支持 MySQL、Oracle、PostgreSQL、SQLIife ,同样也是 premium 才支持5、支持多种操作系统。包括 Linux、Unix、BSD、Solaris、HP-UX、AIX 等。甚至还可以通过代理和 Windows 主机进行通信6、过滤器和归类。syslog=ng 应用程序可以根据收的喔的日志的内容进行排序、或者根据源ip、应用程序、优先级等。可以通过宏自动建立目录、文件、数据库。支持 regex 和布尔表达式,确保只转发你想要的内容7、支持 ipv4 和 ipv6

开源版本的主页 http://www.balabit.com/network-security/syslog-ng/opensource-logging-system/overview

2.syslog-ng的安装

syslog-ng是基于syslog协议的Unix和类Unix系统的开源软件。您可以执行sudo yum install syslog-ng或sudo apt-get install syslog-ng命令安装Syslog-ng。

Linux服务器上默认安装Rsyslog,但是Rsyslog和Syslog-ng无法同时工作,如果您要使用Syslog-ng请先卸载Rsyslog。

采用yum安装,执行:

yum -y install syslog-ng

yum install -y syslog-ng-libdbi

会安装以下两个软件包

libdbi-0.8.3-4.el6.x86_64

syslog-ng-libdbi-3.2.5-4.el6.x86_64

rhel5.x的系统上默认没有使用syslog-ng来记录日志的,需要自己编译安装,安装方法如下:

yum install gcc*

cd /usr/src

wget http://www.balabit.com/downloads/files/syslog-ng/sources/3.2.4/source/eventlog_0.2.12.tar.gz

wget http://www.balabit.com/downloads/files/syslog-ng/open-source-edition/3.3.5/source/syslog-ng_3.3.5.tar.gz

tar xvf eventlog_0.2.12.tar.gz

cd eventlog-0.2.12

./configure --prefix=/usr/local/eventlog

make

make install

cd /usr/src

tar xvf syslog-ng_3.3.5.tar.gz

cd syslog-ng-3.3.5

export PKG_CONFIG_PATH=/usr/local/eventlog/lib/pkgconfig

./configure --prefix=/usr/local/syslog-ng

make

make install

将syslog-ng添加为系统服务

vim /etc/init.d/syslog-ng #内容如下

#!/bin/bash

#

# chkconfig: - 60 27

# description: syslog-ng SysV script.

. /etc/rc.d/init.d/functions

syslog_ng=/usr/local/syslog-ng/sbin/syslog-ng

prog=syslog-ng

pidfile=/usr/local/syslog-ng/var/syslog-ng.pid

lockfile=/usr/local/syslog-ng/var/syslog-ng.lock

RETVAL=0

STOP_TIMEOUT=${STOP_TIMEOUT-10}

start() {

echo -n $"Starting $prog: "

daemon --pidfile=$pidfile $syslog_ng $OPTIONS

RETVAL=$?

echo

[ $RETVAL = 0 ] && touch ${lockfile}

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

killproc -p $pidfile -d $STOP_TIMEOUT $syslog_ng

RETVAL=$?

echo

[ $RETVAL = 0 ] && rm -f $lockfile $pidfile

}

case "$1" in

start)

start

;;

stop)

stop

;;

status)

status -p $pidfile $syslog_ng

RETVAL=$?

;;

restart)

stop

start

;;

*)

echo $"Usage: $prog {start|stop|restart|status}"

RETVAL=2

esac

exit $RETVAL

------------------------------------------------------------

chmod a+x /etc/init.d/syslog-ng

killall syslogd

chkconfig --add syslog-ng

chkconfig syslog-ng on

service syslog-ng start

3.syslog-ng配置文件详解

此时syslog-ng服务已经启动起来了,配置文件的位置在安装目录下的etc/syslog-ng.conf

syslog-ng.conf文件里的内容有以下几个部分组成:

# 全局选项,多个选项时用分好";"隔开

options { .... };

# 定义日志源,来源可以是文件, 本地 sockets, 或者远程主机

source s_name { ... };

# 定义过滤规则,规则可以使用正则表达式来定义,这是可选的 。过滤选项非常强大且复杂;可以过滤日志中的任何方面,比如基础的 syslogd 快捷字段,log 等级,主机名,以及任何log中出现的字段或者是数字。

filter f_name { ... };

# 定义目标 ,信息目标可以是文件, 本地 sockets, 或者远程主机

destination d_name { ... };

# 定义消息链可以将多个源,多个过滤规则及多个目标定义为一条链 。将来源 目的 过滤 都给连接起来并且告诉syslog-ng如何处理日志。

log { ... };

详解如下

----------------------------------------------------------------

消息路径由三部分组成:

消息路径 = 日志消息源 + 过滤规则 + 消息目地

其运行过程:消息源 ---> syslog-ng --> 消息命中 --> 对应的日志目的

选项选项可以改变syslog-ng 的行为,语法如下:options { option(params);option(params);.... }

options { long_hostnames(off); sync(0); perm(0640); stats(3600); };

更多选项如下

chain_hostnames(yes|no) # 是否打开主机名链功能,打开后可在多网络段转发日志时有效

long_hostnames(yes|no) # 是chain_hostnames的别名,已不建议使用

keep_hostname(yes|no) # 是否保留日志消息中保存的主机名称 ,否时,总是使用来源主机来作重写日志的主机名

use_dns(yes|no) # 是否打开DNS查询功能, syslog-ng的节点安全,并确认所有主机都是可以通过dns解释的,否则请关闭该选项。

use_fqdn(yes|no) # 是否使用完整的域名

check_hostname(yes|no) # 是否检查主机名有没有包含不合法的字符

bad_hostname(regexp) # 可通过正规表达式指定某主机的信息不被接受

dns_cache(yes|no) # 是否打开DNS缓存功能

dns_cache_expire(n) # DNS缓存功能打开时,一个成功缓存的过期时间

dns_cache_expire_failed(n) # DNS缓存功能打开时,一个失败缓存的过期时间

dns_cache_size(n) # DNS缓存保留的主机名数量

create_dirs(yes|no) # 当指定的目标目录不存在时,是否创建该目录

dir_owner(uid) # 目录的UID

dir_group(gid) # 目录的GID

dir_perm(perm) # 目录的权限,使用八进制方式标注,例如0644

owner(uid) # 文件的UID

group(gid) # 文件的GID

perm(perm) # 文件的权限,同样,使用八进制方式标注

gc_busy_threshold(n) # 当syslog-ng忙时,其进入垃圾信息收集状态的时间一旦分派的对象达到这个数字,syslog-ng就启动垃圾信息收集状态。默认值是:3000。

gc_idle_threshold(n) # 当syslog-ng空闲时,其进入垃圾信息收集状态的时间一旦被分派的对象到达这个数字,syslog-ng就会启动垃圾信息收集状态,默认值是:100

log_fifo_size(n) # 输出队列的行数

log_msg_size(n) # 消息日志的最大值(bytes)

mark(n) # 多少时间(秒)写入两行MARK信息供参考,目前没有实现

stats(n) # 多少时间(秒)写入两行STATUS信息,默认值是:600

sync(n) # 缓存多少行的信息再写入文件中,0为不缓存,局部参数可以覆盖该值。

time_reap(n) # 在没有消息前,到达多少秒,即关闭该文件的连接

time_reopen(n) # 对于死连接,到达多少秒,会重新连接

use_time_recvd(yes|no) # 宏产生的时间是使用接受到的时间,还是日志中记录的时间;建议使用R_的宏代替接收时间,S_的宏代替日志记录的时间,而不要依靠该值定义。

消息源: 其语法如下:source { source-driver(params);source-driver(params);... };消息源驱动器 source driver,用来收集日志消息,和系统的syslogd交换信息,记录日志

source s_name { internal(); unix-dgram("/dev/log"); udp(ip("0.0.0.0") port(514)); };

file (filename) # 从指定的文件读取日志信息

unix-dgram (filename [options]) # 打开指定的SOCK_DGRAM模式的unix套接字,接收日志消息 ,用在BSD系统上

unix-stream (filename [options]) # 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息 ,主要用在Linux

udp ( (ip),(port) ) # 在指定的UDP端口接收日志消息

tcp ( (ip),(port) ) # 在指定的TCP端口接收日志消息

sun-streams (filename) # 在solaris系统中,打开一个(多个)指定的STREAM设备,从其中读取日志消息

internal() # syslog-ng内部产生的消息

pipe(filename),fifo(filename) # 从指定的管道或者FIFO设备,读取日志信息

以下选项可以用于unix-stream和unix-dgram日志消息源驱动器的声明:

名字 参数数据类型 描述

owner() 字符串 设置套接字的uid,默认是:root

group() 字符串 设置套接字的gid,默认是:root

perm() 数字 设置权限掩码。八进制数字以0开头,例如:0755表示rwxr-xr-x。

keep-alive() yes/no 当syslog-ng重启动,选择是否保持连接,只用于unix-stream()。默认是yes

max-connections()数字 同时打开的连接的数目限制,只用于unix-stream()日志消息源驱动器。默认是10。

例.使用unix-stream()和unix-dgram()日志消息源驱动器

source s_stream { unix-stream(”/dev/log” max-connections(10)); };

source s_dgram { unix-dgram(”/var/run/log”); };

tcp()和udp()

UDP是一种简单的用户数据报协议,使用这种协议可能会发生日志消息的丢失,而且这种协议没有重传机制;TCP是一种面向连接的传输层协议,不会造成日志消息的丢失。

这两种消息源驱动器都不需要位置参数。默认情况下,syslog-ng会绑定到0.0.0.0:514,在所有有效的端口上监听。可以使用localip()参数来限制其接受连接的端口。

注意:514端口是rshell使用的端口,因此如果syslog-log和rshell同时使用,你需要为syslog-ng选择另外的端口。

Declaration: tcp([options]); udp([options]);

下面是udp()和tcp()可用的选项:

选项名 数据类型 描述 默认值

ip或者iplocalip 字符串 绑定的IP地址 0.0.0.0

udp()和tcp()使用示例:

source s_tcp { tcp(ip(127.0.0.1) port(1999); max-connections(10); }; source s_udp { udp(); };

file()

通 常,内核会把自己的消息送到一个特殊的文件(BSD系统是/dev/kmsg,Linux系统是/proc/kmsg),因此你需要使用file()日志 消息源驱动器来指定这个文件。在Linux中,klogd会读取内核信息,并转发到syslogd进程,klogd在转发之前会对内核消息进行处理,使用 /boot/System.map文件中的符号名代替原来的地址。如果你不需要这种功能,可以使用-x参数运行klogd。

Declaration: file(filename);

file()日志消息源驱动器示例:

source s_file { file(”/proc/kmsg”); };

destination d_mail { file("/var/log/maillog" sync(10)); };

这里定义的sync(10)会覆盖全局配置,表示若写入的日志数量达到10,才写入maillog文件。

pipe()

pipe日志消息源驱动器打开一个命名管道,在这个命名管道监听日志消息。在HP-UX系统中,它用于内部日志消息的获得。

Declaration: pipe(filename);

注意首先你需要使用mkfifo建立命名管道。

例.使用pipe()日志消息源驱动器

source s_pipe { pipe(”/dev/log”); );

sun-streams()

solaris使用STREAMS API把日志消息发送到syslogd进程。你必须在编译syslog-ng时加入这个特征。

新版solaris(>=2.51)中,STREAMS使用一个新的IPC调用门来投递日志消息。syslog-ng支持这种IPC机制。

过滤规则,过滤器在syslog-ng 中,过滤器执行日志路由,决定日志是否满足通过的条件。其语法如下:filter {expression;}; 表达式中可以包含逻辑操作符 and or not

filter f_name { not facility(news, mail) and not filter(f_iptables); };

更多规则函数如下

facility(..) # 根据facility(设备)选择日志消息,使用逗号分割多个facility

level(..) # 根据level(优先级)选择日志消息,使用逗号分割多个level,或使用“..”表示一个范围

program(表达式) # 日志消息的程序名是否匹配一个正则表达式

host(表达式) # 日志消息的主机名是否和一个正则表达式匹配

match(表达式) # 对日志消息的内容进行正则匹配

filter() # 调用另一条过滤规则并判断它的值 ,可经过多次过滤链

定义规则的时候也可以使用逻辑运算符and or not

日志消息的目的destination 指定日志消息的去处。目的可以包括一些目的驱动器,指定日志的派发方向。其语法如下:destination { destination-driver(params);destination-driver(params);.....};

destination d_name { file("/var/log/messages"); };

更多动作如下

file (filename) # 把日志消息写入指定的文件

unix-dgram (filename) # 把日志消息写入指定的SOCK_DGRAM模式的unix套接字

unix-stream (filename) # 把日志消息写入指定的SOCK_STREAM模式的unix套接字

udp (ip),(port) # 把日志消息发送到指定的UDP端口

tcp (ip),(port) # 把日志消息发送到指定的TCP端口

usertty(username) # 把日志消息发送到已经登陆的指定用户终端窗口

pipe(filename),fifo(filename) # 把日志消息发送到指定的管道或者FIFO设备

program(parm) # 启动指定的程序,并把日志消息发送到该进程的标准输入

日志路径来源于指定的消息源,匹配所有指定的过滤器,并送到指定的地址。其语法如下: log { source(s1); source(s2); ...filter(f1); filter(f2); ...destination(d1); destination(d2); ... };

log { source(s_name); filter(f_name); destination(d_name) };

日志的处理流程大致如下:

首先是 "日志的来源 source s_name { ... };"

然后是 "过滤规则 filter f_name { ... };"

再然后是 "消息链 log { source(s_name); filter(f_name); destination(d_name) };"

最后是 "目标动作 destination d_name { ... };"

4.syslog-ng文件配置实例

$syslog-ng_path

/etc/syslog-ng.conf 内容如下

options { long_hostnames(off); sync(0); perm(0640); stats(3600); };

source src {

internal();

unix-dgram("/dev/log");

# 表示日志来源为本机udp的514端口,

udp(ip("0.0.0.0") port(514));

};

filter f_iptables { facility(kern) and match("IN=") and match("OUT="); };

filter f_console { level(warn) and facility(kern) and not filter(f_iptables)

or level(err) and not facility(authpriv); };

filter f_newsnotice { level(notice) and facility(news); };

filter f_newscrit { level(crit) and facility(news); };

filter f_newserr { level(err) and facility(news); };

filter f_news { facility(news); };

filter f_mailinfo { level(info) and facility(mail); };

filter f_mailwarn { level(warn) and facility(mail); };

filter f_mailerr { level(err, crit) and facility(mail); };

filter f_mail { facility(mail); };

filter f_cron { facility(cron); };

filter f_local { facility(local0, local1, local2, local3, local4, local6, local7); };

filter f_acpid_full { match('^acpid:'); };

filter f_acpid { level(emerg..notice) and match('^acpid:'); };

filter f_acpid_old { match('^

acpid

acpid

:'); };

filter f_netmgm { match('^NetworkManager:'); };

filter f_messages { not facility(news, mail) and not filter(f_iptables); };

filter f_warn { level(warn, err, crit) and not filter(f_iptables); };

filter f_alert { level(alert); };

destination console { pipe("/dev/tty10" owner(-1) group(-1) perm(-1)); };

log { source(src); filter(f_console); destination(console); };

destination xconsole { pipe("/dev/xconsole" owner(-1) group(-1) perm(-1)); };

log { source(src); filter(f_console); destination(xconsole); };

destination newscrit { file("/var/log/news/news.crit"

owner(news) group(news)); };

log { source(src); filter(f_newscrit); destination(newscrit); };

destination newserr { file("/var/log/news/news.err"

owner(news) group(news)); };

log { source(src); filter(f_newserr); destination(newserr); };

destination newsnotice { file("/var/log/news/news.notice"

owner(news) group(news)); };

log { source(src); filter(f_newsnotice); destination(newsnotice); };

destination mailinfo { file("/var/log/http://mail.info"); };

log { source(src); filter(f_mailinfo); destination(mailinfo); };

destination mailwarn { file("/var/log/mail.warn"); };

log { source(src); filter(f_mailwarn); destination(mailwarn); };

destination mailerr { file("/var/log/mail.err" fsync(yes)); };

log { source(src); filter(f_mailerr); destination(mailerr); };

destination mail { file("/var/log/mail"); };

log { source(src); filter(f_mail); destination(mail); };

destination acpid { file("/var/log/acpid"); };

destination null { };

log { source(src); filter(f_acpid); destination(acpid); flags(final); };

log { source(src); filter(f_acpid_full); destination(null); flags(final); };

log { source(src); filter(f_acpid_old); destination(acpid); flags(final); };

destination netmgm { file("/var/log/NetworkManager"); };

log { source(src); filter(f_netmgm); destination(netmgm); flags(final); };

destination localmessages { file("/var/log/localmessages"); };

log { source(src); filter(f_local); destination(localmessages); };

destination messages { file("/var/log/messages"); };

log { source(src); filter(f_messages); destination(messages); };

destination firewall { file("/var/log/firewall"); };

log { source(src); filter(f_iptables); destination(firewall); };

destination warn { file("/var/log/warn" fsync(yes)); };

log { source(src); filter(f_warn); destination(warn); };

filter f_ha { facility(local5); };

destination hamessages { file(/var/log/ha); };

log { source(src); filter(f_ha); destination(hamessages); };

修改完 syslog-ng 之后要重启服务:

# /etc/init.d/syslog-ng restart

测试

日志一般为认证日志,可以先尝试打开一个新的登录窗口,使用su 或者是 sudo 都可以。接着检查 /var/log/auth.log 文件。在客户端上进行一些操作,接着检查 /var/log/HOSTS 是否已经为远程客户端创建新的目录。

另外一个方法是使用更加高级的 logger 命令:

# logger “this is only a test”

# logger -p auth.debug “this is only a test”

tcp传输

服务端配置:

options {

flush_lines (0);

time_reopen (10);

log_fifo_size (1000);

long_hostnames (off);

use_dns (no);

use_fqdn (no);

create_dirs (no);

keep_hostname (yes);

};

#Define source

source s_network {

tcp(ip(0.0.0.0) port(514));

};

#Define filter rules

#filter f_local0 { level(info..emerg); };

#Define destination file path

destination d_local0 { file("/var/log/local0.log" perm(0755) dir_perm(0755) create_dirs(yes)); };

# Write to destination files

log { source(s_network); destination(d_local0); };

客户端如下:

options {

flush_lines (0);

time_reopen (10);

log_fifo_size (1000);

long_hostnames (off);

use_dns (no);

use_fqdn (no);

create_dirs (no);

keep_hostname (yes);

};

source s_sys {

unix-stream ("/dev/log");

internal();

};

filter f_auth { facility(auth); };

destination center_log_server { tcp("192.168.10.112" port(514)); };

log { source(s_sys); filter(f_auth); destination(center_log_server); };

简单配置:

source告知日志来源于/dev/log,unix-stream 打开指定的SOCK_STREAM模式的unix套接字,接收日志消息和internal(syslog本身产生日志);

定义filter为auth策略;

告知日志服务器为192.168.10.112,端口为514,tcp协议。

然后重启客户端和服务端的syslog-ng进程。

sudo /etc/init.d/syslog-ng restart

重启服务 systemctl restart syslog-ng

systemctl status syslog-ng

oracle DB配置案例apache/ tomcat/Oracle weblogic/IBM websphere/ IIS等配置案例



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有